#pragma once
#include <memory>
#include <string>

#include "common_export.h"

// Forward declaration for clipp namespace
namespace clipp
{
    class group;
}

class COMMON_EXPORT Args
{
public:
    // 命令类型枚举
    enum class CommandType
    {
        NONE,
        HELP,
        TE_DOSESTAT
    };

    // 获取单例实例
    static Args& getInstance();

    // 禁止拷贝构造和拷贝赋值
    Args(const Args&) = delete;
    Args& operator=(const Args&) = delete;

    // 解析命令行参数
    bool parse(int argc, char** argv);

    // 获取解析结果
    CommandType getCommandType() const { return _commandType; }
    const std::string& getVolumePath() const { return _volumePath; }
    const std::string& getDosePath() const { return _dosePath; }

    // 打印帮助信息
    void printHelp() const;

private:
    // 私有构造函数
    Args();

    // 初始化命令行解析器
    void initParser();

    // 解析结果
    CommandType _commandType = CommandType::NONE;
    std::string _volumePath;
    std::string _dosePath;
    std::string _programName;

    // 命令行解析器
    std::unique_ptr<clipp::group> _cliParser;
};

COMMON_EXPORT inline Args& args() { return Args::getInstance(); }